// package cn.autumnorange.app.gateway.zuul;
//
// import cn.autumnorange.app.common.rpc.exception.JsonException;
// import com.netflix.zuul.context.RequestContext;
// import com.netflix.zuul.exception.ZuulException;
// import lombok.extern.slf4j.Slf4j;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter;
// import org.springframework.cloud.netflix.zuul.util.ZuulRuntimeException;
// import org.springframework.util.ReflectionUtils;
//
// import javax.servlet.http.HttpServletRequest;
// import javax.servlet.http.HttpServletResponse;
//
//// error过滤器：pre、routing的任意一个阶段如果抛异常了，则执行error过滤器，然后再执行post给出响应。
//// 而post异常了，就直接调用error了。
// @Slf4j
// public class GateWayErrorFilter extends SendErrorFilter implements GateWayFilterHandle {
//  protected String shouldFilterKey = "throwable";
//  @Autowired JsonException jsonExceptionImpl;
//
//  @Override
//  public String filterType() {
//    return GateWayFilterHandle.FILTERTYPE_ERROR;
//  }
//
//  @Override
//  public int filterOrder() {
//    return super.filterOrder();
//  }
//
//  @Override
//  public boolean shouldFilter() {
//    return RequestContext.getCurrentContext().containsKey(shouldFilterKey);
//  }
//
//  @Override
//  public Object run() {
//    try {
//      RequestContext ctx = RequestContext.getCurrentContext();
//      ZuulException exception = findZuulException(ctx.getThrowable());
//      HttpServletRequest request = ctx.getRequest();
//      HttpServletResponse response = ctx.getResponse();
//
//      jsonExceptionImpl.jsonException(request, response, exception, exception.nStatusCode);
//    } catch (Exception var5) {
//      ReflectionUtils.rethrowRuntimeException(var5);
//    }
//
//    return null;
//  }
//
//  public ZuulException findZuulException(Throwable throwable) {
//    if (throwable.getCause() instanceof ZuulRuntimeException) {
//      return (ZuulException) throwable.getCause().getCause();
//    } else if (throwable.getCause() instanceof ZuulException) {
//      return (ZuulException) throwable.getCause();
//    } else {
//      return throwable instanceof ZuulException
//          ? (ZuulException) throwable
//          : new ZuulException(throwable, 500, (String) null);
//    }
//  }
// }
